/**
 * 拖拽助手
 * DragHelper.init(stage:createjs.Stage) 初始化，在new createjs.Stage后调用
 * DragHelper.addDragObject(obj:createjs.DisplayObject) 添加拖拽对象
 */
(function(cjs,an){
    let current_obj,dx,dy,_stage=null;
    const objList=[];
    
    const onMouseDown=(e)=>{
        current_obj=e.currentTarget;
        let point=current_obj.globalToLocal(e.stageX,e.stageY);
        dx=point.x;
        dy=point.y;
    };
    const onPressMove=(e)=>{
        if(current_obj){
            const parent=current_obj.parent;
            parent.globalToLocal(e.stageX,e.stageY,current_obj);
            current_obj.x-=dx;
            current_obj.y-=dy;
        }
        
    };
    const onPressUp=()=>{
        current_obj=null;
    };
    const DragHelper={
        /**
         * 初始化，传入舞台对象，监听舞台pressmove和pressup事件。
         * @param {createjs.Stage} stage 舞台
         */
        init:(stage)=>{
            stage.on('pressmove',onPressMove,null);
            stage.on('pressup',onPressUp,null);
            _stage=stage;
        },
        /**
         * 添加拖拽对象
         * @param {createjs.DisplayObject} obj 目标对象
         */
        addDragObject:(obj)=>{
            if(_stage){
                obj.on('mousedown',onMouseDown,null);
                objList.push(obj);
            }else{
                console.warn('尚未调用DragHelper.init初始化'); 
            }
        },
        /**
         * 移除拖拽，指定的对象将从对象列表移除
         * @param {createjs.DisplayObject} obj 目标对象
         * @returns 
         */
        removeDragObject:(obj)=>{
            let i=objList.indexOf(obj);
            if(i==-1){
                console.warn('该对象不在列表，已经移除或者从未添加');
                return;
            }
            obj.off('mousedown',onMouseDown);
            objList.splice(i,1);
        },
        /**
         * 移除所有拖拽对象
         */
        removeAllDragObject:()=>{
            objList.forEach((obj)=>{
                obj.off('mousedown',onMouseDown);
            });
            objList.length=0;
        },
        /**
         * 释放拖拽功能，取消监听舞台pressmove和pressup事件，清空对象列表
         */
        free:()=>{
            _stage.off('pressmove',onPressMove);
            _stage.off('pressup',onPressUp);
            _stage=null;

            DragHelper.removeAllDragObject();
        }
    };
    an.DragHelper=DragHelper;
})(createjs = createjs||{}, AdobeAn = AdobeAn||{});
var createjs, AdobeAn;